package com.io.zip;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/**
 * 通常用java来打包文件生成压缩文件后，有如下两个地方会出现乱码 ：
 * 
 * 1、内容的中文乱码问题，这个问题网上很多人给出了解决方法，主要有两种方法：一是修改sun的源码；另一个是使用开源的类库org.apache.tools.
 * zip
 * .ZipOutputStream和org.apache.tools.zip.ZipEntry，这两个类ant.jar中有，可以直接下载使用即可，毫无疑问
 * ，选择后者更方便
 * 2、压缩文件注释的中文乱码问题：zos.setComment("中文测试");这个问题网上对应的解决方法资料较少。在自己机器上的工程创建的测试类
 * ，没有任何问题
 * ，但是在公司的项目中使用一直出现乱码，通过使用设置编码的方法（zos.setEncoding("gbk");）终于发现了问题，测试项目的编码方式为gbk
 * ，而公司项目的默认编码是utf-8，所以测试项目没问题而公司的项目中出现了问题。
 * org.apache.tools.zip.ZipOutputStream默认使用项目的编码方式
 * ，理论上讲utf-8也是支持中文的，实在想不通为啥还是乱码，通过setEncoding方法改成gbk即可解决
 * 
 * @author Administrator
 *
 */
public class GZipCompress {

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new FileReader("aa.txt"));
		BufferedOutputStream out = new BufferedOutputStream(
				new GZIPOutputStream(new FileOutputStream("test.gz")));
		System.out.println("writing file");
		int c;
		while ((c = in.read()) != -1) {
			out.write(c);
		}
		in.close();
		out.close();

		System.out.println("reading file");
		BufferedReader in2 = new BufferedReader(new InputStreamReader(
				new GZIPInputStream(new FileInputStream("test.gz"))));
		String s;
		while ((s = in2.readLine()) != null) {
			System.out.println(s);
		}
	}

}
